1、new  delete  malloc free 关系

new 会调用构造函数
delete 会调用析构函数。

free 只会释放内存
他们都是用于申请动态内存和释放内存。

2、delete 和delete[] 区别
delete只会调用一次析构函数。
delete【】会调用每一个成员的析构函数，

new 和delete搭配。
new【】和 delete【】搭配；

3、继承的优缺点
优点：继承可以方便的改变父类的实现；
缺点：父类至少定义了子类部分行为，父类的任何改变都可能改变子类的行为。如果继承下来的实现不适合子类，
就需要重写父类，或者被其他更适合的类替换；

4、C++ 有哪些性质，（面向对象特点）
封装，继承，多态
封装可以实现信息隐藏，使得类的定义和实现分离。对数据更为安全

5、子类析构时，会调用父类的析构函数么。
析构函数调用的次序是。派生类先析构后才是基类的析构。所以基类的析构函数调用的时候，派生类的信息已经
全部被摧毁了。跟构造函数相反。构造函数是，先构造基类的构造函数，再调用派生类的构造函数。

6、多态，虚函数，纯虚函数
多态：



7、数组
数组的内存是连续的。可以根据下标读写任何一个元素。时间效率很高。但是一般的数组空间效率不高，
就是一般的数组长度是特定的。
于是大神创建了多种动态数组。比如vector，先给数组很小的空间，当超过数组容量时，再重新分配2倍的空间给他。
把旧的数组复制到新的数组上去；
8、数组和指针
声明数组时，数组名字也是一个指针，该指针指向数组第一个元素。

9、const    const后面的作为一个整体。使得那个整体不可改变。
	int x = 10;
	int y = 10;
	const int *p = &x;//效果跟下面的一样。
	 int const * p = &x;//const *p 说明 *p不能改变。也就是说不能通过*p修改指向对象的内容；
	/*  *p = 100;//这个错误  */
	 cout << p<<endl;
	++p;//但是可以这样。
	cout << p<<endl;
	p = &y;
	cout << p<<endl;

	int  n = 10;
	int  m = 10;
	int *const q = &n;//const  q；也就是说 q指向的不能改变；也就是q不能改变
	//q = &m;  想改变指向的地址，不行。不允许。
	//q++;// 不允许，q不可改变
	*q = 100;//允许  指向的内容可以改变，就是不能改变他的地址.n已经改变。
	cout << n;




